package com.hjh.netty.elect.demo5.parser.impl;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;

/**
 * 自动发送的工具
 */
public class AutoSendTool {


    /**
     * 把devSnLen长度的字节转换位16进制的字符串
     *
     * @param in
     * @param length
     * @return
     */
    public static String changeToStr(ByteBuf in, int length) {
        byte[] bytes = new byte[length];
        in.readBytes(bytes);
        String devSn = ByteBufUtil.hexDump(bytes).toUpperCase();
        return devSn;
    }

    /**
     * 取一个字节的高几位bit
     *
     * @param b
     * @param length
     * @return
     */
    public static int getLeftNum(byte b, int length) {
        return b >> (8 - length);
    }

    /**
     * 取低几位
     *
     * @param b
     * @param length
     * @return
     */
    public static int getRightNum(byte b, int length) {
        byte mv = (byte) (0xff >> (8 - length));
        return b & mv;
    }

    public static int getHeight4(byte b) {
        return getLeftNum(b, 4);
    }

    public static int getLow4(byte b) {
        return getRightNum(b, 4);
    }

    /**
     * 取中间几位，包括 startIndex位和endIndex位
     *
     * @param b
     * @param startIndex
     * @param endIndex
     * @return
     */

    public static int getMidNum(byte b, int startIndex, int endIndex) {

        byte i = (byte) getLeftNum(b, endIndex + 1);//先取高几位

        return getRightNum(i, endIndex - startIndex + 1);//再取低几位

    }
}
